home *** CD-ROM | disk | FTP | other *** search
- #ifndef __MAININCLUDES__
- #include "MainApp.h"
- #endif
-
- #ifndef __DOUBLEBUFFERINCLUDES__
- #define __DOUBLEBUFFERINCLUDES__
- #endif
-
- enum {
- kBufferSize = (5 * 1024), // private, 2k buffersize
- kNumBuffers = 4 // number of buffers
- };
-
- enum { // buffer status values
- kBufferReady = 0,
- kBufferPlaying = 1,
- kBufferFilling = 2,
- kBufferProcessing = 3
- };
-
- typedef struct { // Deferred task record
- QElemPtr qLink;
- short qType;
- short dtFlags;
- ProcPtr dtAddr;
- long dtParam;
- long dtReserved;
-
- } DeferredTask, *DeferredTaskPtr;
-
- typedef struct {
- ParamBlockHeader
- short ioFRefNum;
- long filler1;
- short filler2;
- Ptr ioBuffer;
- long ioReqCount;
- long ioActCount;
- short ioPosMode;
- long ioPosOffset;
- } strippedDownReadPB, *strippedDownReadPBPtr;
-
- typedef struct { // Extended paramblock
- strippedDownReadPB pb;
- Ptr userInfo;
- short headerNum;
- } ExtParamBlockRec, *ExtParmBlkPtr;
-
- typedef struct { // buffer record
- short flags; // buffer flags
- ExtParamBlockRec readPB; // pb for asynch reads
- DeferredTask dt; // deffered task record
- SoundHeaderPtr header; // header to put data in
- } SampleBuffer, *SampleBufferPtr;
-
- typedef struct { // Double Buffering Info
- OSType signature; // Info signature
- unsigned long refNum; // RefNum of device
- unsigned long fileDataStart; // where data starts in file
- long bytesToGo; // number of bytes to go
- short currentBuffer; // buffer playing now
- SampleBuffer buffers[kNumBuffers]; // data buffers
- SndCommand bCmd; // buffer cmd sndCmd
- SndCommand cbCmd; // callback cmd sndCmd
- ProcPtr processingProcPtr; // pointer to processing procedure
- ProcPtr readProcPtr;
- long oldUserInfo; // what userlong was.
- long a5ref;
- } PrivateDBInfo, *PrivateDBInfoPtr;
-
- #define NextHeader(x) (x+1) < kNumBuffers ? x+1 : 0
-
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // prototypes
-
- PrivateDBInfoPtr SetUpDBPrivateMem(void);
- void FreeDBPrivateMem (void *freeSpace);
- OSErr PrimeBuffers (PrivateDBInfoPtr dbInfo, SoundHeaderPtr generalHeader);
- pascal void DBService (SndChannelPtr chan,SndCommand* acmd);
- OSErr QueueFrame (SndChannelPtr chan, PrivateDBInfoPtr dbInfo);
- void CompleteRead (void);
- OSErr ReadProc (void *private, short bufNum, Boolean asynch);
- void ProcessingProc (void);
- void TwosToOffset(const Ptr buffer,long length);
- void Reverse(Ptr buffer, long length);
- void ReadWave (WaveCyclePtr theWave, unsigned short reqBytes, Ptr buffer);
- OSErr WaveReadProc (void *private, short bufNum, Boolean asynch);
-
-
-
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // inlines
-
-
- pascal long getPB () = {
- 0x2e88 // MOVE.L A0,(A7)
- };
-
- pascal long putPB (void* thePB) = {
- 0x205f // MOVEA.L (SP)+, A0
- };
-
- pascal short getErr () = {
- 0x3e80 // MOVE.W D0,(A7)
- };
-
- pascal SampleBufferPtr getDTParam () = {
- 0x2e89 // MOVE.L A1,(A7)
- };
-
- pascal void CallDTWithParam (ProcPtr routine, SampleBufferPtr arg) = {
- 0x225f, // MOVEA.L (SP)+, A1
- 0x205f, // MOVEA.L (SP)+, A0
- 0x4e90 // JSR (A0)
- };
-
- pascal void QuickDTInstall (DeferredTaskPtr taskEl) = {
- 0x2278, 0x0d9c, // MOVEA.L jDTInstall,A1
- 0x205f, // MOVEA.L (SP)+, A0
- 0x4e91 // JSR (A1)
- };
-